package com.b1.taskmanagerclient.start.gui;

import com.b1.taskmanagerclient.connect.Client;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

/**
 * класс окна добавления новой задачи\контакта
 * @author Exoo
 */
public class AddWindow extends JFrame
{
    private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(AddWindow.class);
    private JButton button;             // кнопка
    private JPanel panel;               // панель окна
    private JLabel labelPlace;          // текст места 
    private JLabel labelContactId;      // текст id контакта
    private JComboBox comboContacts;    // комбобокс с контактами
    private JTextField textField1;      // поле для ввода такста
    private JTextField textField2;      // поле для ввода такста
    private JTextField textField3;      // поле для ввода такста
    private JTextField textField4;      // поле для ввода такста
    private JTextArea textArea;         // поле для ввода такста
    private JRadioButton radioMeeting;  // радио кнопка выбора типа встречи
    private JRadioButton radioMemo;     // радио кнопка выбора типа встречи
    private String[][] contactArray;    // список контактов
    private String[][] taskArray;       // список задач
    private Client client;              // клиент текщего подключения
    private JFrame oldWindow;           // родительское окно из которого последовал вызов данного окна

    /**
     * Конструктор класса
     * определяет тип окна для добавления
     * i = 0 добавление задач
     * i = 1 добавление контакта
     * получает клинтское подключение
     * и окно родитель
     */
    public AddWindow(int i,Client inClient,final JFrame window) 
    {
        super("Add");
        client = inClient;
        oldWindow = window;
        this.addWindowListener(new java.awt.event.WindowAdapter()
        {
            /*
             * слушатель закрытия окна
             * вызывает окно родитель
             */
            public void windowClosing(java.awt.event.WindowEvent event) 
            {
                window.setVisible(true);
            }
        });
        switch(i)
        {
            case 0:
                taskArray = client.getTaskList();
                contactArray = client.getContactList();
                addTask();
                break;
            case 1:
                contactArray = client.getContactList();
                addContact();
                break;
        }       
        
    }
    
    /**
     * метод добавления лейбла в окно
     * @param name  - имя лейбла
     * @param positionX - позиция по оси х
     * @param positionY - позиция по оси Y
     * @param width - ширина
     * @param height  - высота
     */
    private void addLabel(String name,int positionX, int positionY,int width,int height)
    {
        JLabel label  = new JLabel(name);
        label.setSize(width,height);
        label.setLocation(positionX, positionY);
        panel.add(label);
        
    }
    
    /**
     * метод прорисовки окна добавления задачи
     */
    private void addTask()
    {
        this.setTitle("Add new Task");
        this.setSize(300, 400); 
        try 
        {
            // выравнивание окна по центру
            java.awt.Toolkit jToolkit = java.awt.Toolkit.getDefaultToolkit();
            java.awt.Dimension screenSize = jToolkit.getScreenSize();
            this.setLocation((int) (screenSize.getWidth()/4), (int) (screenSize.getHeight()/4));
        } 
        catch (java.awt.AWTError ex) 
        {
            log.error(AddWindow.class.getName(), ex);
        }
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        panel = new JPanel();
        panel.setLayout(null);
        
        addLabel("Title Task",20,10,60,14);
        textField1 = new JTextField();
        textField1.setSize(100,20);
        textField1.setLocation(20,25);
        textField1.setName("Title");
        panel.add(textField1);

        addLabel("Change contact",150,10,90,14);
        labelContactId = new JLabel();
        labelContactId.setText(contactArray[0][0]);
        
        // добавлние списка контактов в комбобокс
        // имя контакта - ключ
        final java.util.HashMap<String, String> contactMap = new java.util.HashMap<String, String>();
        for (int i = 0; i < contactArray.length; i++) 
        {
            contactMap.put(contactArray[i][1], contactArray[i][0]);
            
        }
        java.util.Set<String> myset = contactMap.keySet();
        String[] dataValue = (String[]) myset.toArray(new String[myset.size()]);
        comboContacts = new JComboBox(dataValue);
        comboContacts.setSize(100,20);
        comboContacts.setLocation(150,25);
        comboContacts.addActionListener(new ActionListener() 
        {
            /*
             * слушатель выбора контакта. его id записывается в labelContactId
             */
            public void actionPerformed(ActionEvent e) 
            {
                JComboBox box = (JComboBox) e.getSource();
                String item = contactMap.get((String) box.getSelectedItem());
                labelContactId.setText(item);
            }
        });
        panel.add(comboContacts);
        
        addLabel("Date begin",20,50,60,14);
        textField2 = new JTextField();
        textField2.setSize(100,20);
        textField2.setLocation(20,65);
        textField2.setName("Begin Date");
        panel.add(textField2);
        
        addLabel("End date",120,50,60,14);
        textField4 = new JTextField();
        textField4.setSize(100,20);
        textField4.setLocation(120,65);
        textField4.setName("End Date");
        panel.add(textField4);
        
        addLabel("Description",20,90,80,14);
        textArea = new JTextArea();
        textArea.setSize(200,80);
        textArea.setLocation(20,105);
        textArea.setName("Description");
        javax.swing.border.Border br = new javax.swing.plaf.metal.MetalBorders.TextFieldBorder();
        textArea.setBorder(br);
        panel.add(textArea);
        
        labelPlace  = new JLabel("Place");
        labelPlace .setSize(50,14);
        labelPlace .setLocation(20, 220);
        labelPlace .setVisible(false);
        textField3 = new JTextField();
        textField3.setSize(100,20);
        textField3.setLocation(20,235);
        textField3.setName("Place");
        textField3.setVisible(false);
        panel.add(labelPlace );
        panel.add(textField3);
        
        // добавление группы кнопок выбора типа встречи
        ButtonGroup bGroup = new ButtonGroup();
        radioMeeting = new JRadioButton("Meeting");
        radioMeeting.setSize(80, 14);
        radioMeeting.setLocation(20, 200);
        radioMeeting.addActionListener(new ActionListener() 
        {
            /*
             * слушатель выбора группы радио кнопок
             */
            public void actionPerformed(ActionEvent e) 
            {
                if (radioMeeting.isEnabled()) {
                    labelPlace.setVisible(true);
                    textField3.setVisible(true);
                }
            }
        });
        radioMemo = new JRadioButton("Memo",true);
        radioMemo.setLocation(100, 200);
        radioMemo.setSize(90, 14);
        radioMemo.addActionListener(new ActionListener() 
        {
            /*
             * слушатель выбора группы радио кнопок
             */
            public void actionPerformed(ActionEvent e) 
            {
                if (radioMemo.isEnabled()) {
                    labelPlace.setVisible(false);
                    textField3.setVisible(false);
                }
            }
        });
        bGroup.add(radioMeeting);
        bGroup.add(radioMemo);
        panel.add(radioMeeting);
        panel.add(radioMemo);
        
        button = new JButton("Add Task");
        button.setLocation(20,270);
        button.setSize(120,40);
        button.addActionListener(new ActionListener()
        {
            /*
             * слушатель кнопки добавления
             * новая задача добавляется в существующий массив задач
             * и осуществляется передача обновленного массива клиенту
             * для отправки его серверу
             * данное окно закрывается и появляется окно родитель
             */
            public void actionPerformed(ActionEvent e) 
            {
                int lastIndex = taskArray.length;
                String type = "memo";
                if (radioMeeting.hasFocus()) 
                {
                    type = "meeting";
                    textField3.setText("-");
                }
                String temp[][] = new String [lastIndex+1][8];
                for (int i = 0; i < lastIndex; i++) 
                {
                    temp[i]=taskArray[i];
                }
                temp[lastIndex][0] =Integer.toString(Math.abs((int)System.currentTimeMillis())%1203); 
                temp[lastIndex][1] = textField2.getText();
                temp[lastIndex][2] = textField4.getText();
                temp[lastIndex][3] = textField1.getText();
                temp[lastIndex][4] = type;
                temp[lastIndex][5] = textField3.getText();
                temp[lastIndex][6] = labelContactId.getText();
                temp[lastIndex][7] = textArea.getText();
                taskArray = temp;
                client.setTaskList(taskArray);
                oldWindow.setVisible(true);
                dispose();
            }
        });
        panel.add(button);
        this.setContentPane(panel);
    }
    
    /**
     * метод прорисовки окна добавления контакта
     */
    private void addContact()
    {
        this.setTitle("Add new Contact");
        this.setSize(300, 200);
        try 
        {
            // выравнивание окна по центру
            java.awt.Toolkit jToolkit = java.awt.Toolkit.getDefaultToolkit();
            java.awt.Dimension screenSize = jToolkit.getScreenSize();
            this.setLocation((int) (screenSize.getWidth()/4), (int) (screenSize.getHeight()/4));
        } 
        catch (java.awt.AWTError ex) 
        {
            log.error(AddWindow.class.getName(), ex);
        }
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        this.setAlwaysOnTop(true);
        panel = new JPanel();
        panel.setLayout(null);

        addLabel("First Name",20,10,80,14);
        textField1 = new JTextField();
        textField1.setSize(100,20);
        textField1.setLocation(20,25);
        textField1.setName("first name");
        panel.add(textField1);

        addLabel("Last name",20,50,60,14);
        textField2 = new JTextField();
        textField2.setSize(100,20);
        textField2.setLocation(20,65);
        textField2.setName("last name");
        panel.add(textField2);
        
        addLabel("Phone",20,90,60,14);
        textArea = new JTextArea();
        textArea.setSize(80,20);
        textArea.setLocation(20,105);
        textArea.setName("phone");
        javax.swing.border.Border br = new javax.swing.plaf.metal.MetalBorders.TextFieldBorder();
        textArea.setBorder(br);
        panel.add(textArea);        
        
        button = new JButton("Add contact");
        button.setLocation(140,30);
        button.setSize(120,40);
        button.addActionListener(new ActionListener()
        {
            /*
             * слушатель кнопки добавления
             * новый контакт добавляется в существующий массив контактов
             * и осуществляется передача обновленного массива клиенту
             * для отправки его серверу
             * данное окно закрывается и появляется окно родитель
             */
            public void actionPerformed(ActionEvent e) 
            {
                int lastIndex = contactArray.length;
                String temp[][] = new String [lastIndex+1][4];
                for (int i = 0; i < lastIndex; i++) 
                {
                    temp[i]=contactArray[i];
                }
                temp[lastIndex][0] = Integer.toString(Math.abs((int)System.currentTimeMillis())%1300);
                temp[lastIndex][1] = textField1.getText();
                temp[lastIndex][2] = textField2.getText();
                temp[lastIndex][3] = textArea.getText();
                contactArray = temp;
                client.setContactList(contactArray);
                oldWindow.setVisible(true);
                dispose();
            }
        });
        panel.add(button);        
        this.setContentPane(panel);
    }
    
    
}
